﻿using Hydrogen.MarkovChain.SolidMap2DScene;

namespace Hydrogen.MarkovChain
{
    public abstract class SolidBlockBase
    {
        protected string _solidsStr;

        public SolidBlockBase(string solids)
        {
            this._solidsStr = solids;
        }

        /// <summary>
        /// 获取一个基准点的颜色
        /// </summary>
        /// <returns></returns>
        public abstract SolidType GetDatumSolid();
        /// <summary>
        /// 这个点周围是否满足颜色块的要求
        /// </summary>
        /// <param name="x">基准点在 map 里的一个位置</param>
        /// <param name="y">基准点在 map 里的一个位置</param>
        /// <param name="dir">满足的时候，朝向是哪里</param>
        public abstract bool IsMatch(IMap map, int x, int y, out Direction dir);

        /// <summary>
        /// 将这个色块写入 map
        /// </summary>
        /// <param name="map"></param>
        /// <param name="x">写入的时候，基准点应该在 map 的哪个位置</param>
        /// <param name="y">写入的时候，基准点应该在 map 的哪个位置</param>
        /// <param name="dir">朝向</param>
        public abstract void SetColor(IMap map, int x, int y, Direction dir);
    }
}
